home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 625 / necro62 / necro_62.gfa (.txt) < prev    next >
GFA-BASIC Atari  |  1992-09-06  |  19KB  |  818 lines

  1. ' Lets Try This Again!
  2. '
  3. ' Dr. Necro
  4. ' By Ken Schafer
  5. '
  6. ' Revision History
  7. ' ----------------
  8. '
  9. ' Ver 0.62     8/6/92
  10. ' -------------------
  11. ' New concept for virus animations.  Viruses are animated round robin style, a
  12. '  few each interrupt.  This should spread the load more evenly, and perhaps
  13. '  increase performance to an acceptable level.
  14. '
  15. ' Ver 0.61a    2/8/92
  16. ' -------------------
  17. ' Re-vamped sprite system, routines for virus animation added
  18. '  animation is too much of a drain on processor resources.
  19. '  barely playable on a 16MHz machine.
  20. '
  21. ' Ver 0.60 -- 12/14/91
  22. ' --------------------
  23. '  Internal Cleanup in preparation for C translation
  24. '     (check_lines and erase_lines are MUCH nicer)
  25. '
  26. ' Ver 0.58 -- 11/20/91
  27. ' --------------------
  28. '  Fixed small bug that occasionally preventing game from ending
  29. '     when it should (Stooooooopid mistake!)   (thanx Mom!)
  30. '
  31. ' Ver 0.57 -- 7/31/91 -- RELEASED AS VER 0.85b (oops!)
  32. ' -------------------
  33. '  Joystick routines added(0.57)
  34. '  Sadistic music added as an experiment(0.56)
  35. '
  36. ' Ver 0.55 -- 6/23/91
  37. ' -------------------
  38. '  Levels now function. Game is playable as is
  39. '  Needs Title Screen, sound, animation and cleanup
  40. '
  41. ' Ver 0.52 -- 6/21/91
  42. ' -------------------
  43. '  Added routines to implement virus display and scoring
  44. '
  45. ' Ver 0.50 -- 6/21/91
  46. ' -------------------
  47. '  Lots of Changes -- Pills now have proper shape (tops, sides etc)
  48. '  Added all changes to checking routines to implement various shapes
  49. '  Pills that are linked now have bonds and hold each other up!
  50. '
  51. ' Ver 0.40 -- 6/19/91
  52. ' -------------------
  53. '  Replaced boxes with actual bitmaps
  54. '  Added Background Picture --------- Things are getting REAL cool!
  55. '
  56. ' Ver 0.31 -- 5/26/91
  57. ' -------------------
  58. '  Added routines to allow individual pill pieces to fall
  59. '
  60. ' Ver 0.30 -- 4/20/91
  61. ' -------------------
  62. '  Added boxes instead of debug numbers
  63. '  Began Coding routines to check/erase lines
  64. '
  65. ' Ver 0.21 -- 4/18/91
  66. ' -------------------
  67. '  First version as Dr. Necro
  68. '  Replaced screen point checking with an array lookup -- much faster
  69. '
  70. ' Ver 0.14 -- 1/20/91
  71. ' -------------------
  72. '  Originally the beginnings of a Tetris clone...
  73. '  The main logic for Dr. Necro was "extracted" from here.
  74. '
  75. '
  76. ' Constants
  77. '
  78. v1_0$="0.62"
  79. v1_1$="9/6/92"
  80. '
  81. v0_D#=0
  82. v0_E#=128
  83. v0_F#=1
  84. v0_10#=0
  85. v0_11#=5
  86. v0_12#=1
  87. v0_13#=0
  88. v0_14#=1
  89. v0_15#=0
  90. v0_16#=16
  91. v0_17#=4
  92. v0_4C#=32
  93. ' Bottle descriptor Dec,Bit, Meaning
  94. ' (  1)  0  Color 0=Empty   2=Blue     A color with no piece desc bit set
  95. ' (  2)  1  Info  1=Yellow  3=Red      (bits 2-5) indicate a single piece
  96. ' (  4)  2  Right Half
  97. ' (  8)  3  Left Half
  98. ' ( 16)  4  Bottom Half
  99. ' ( 32)  5  Top Half
  100. ' ( 64)  6  Virus
  101. ' (128)  7  Wall piece
  102. '
  103. ' Init
  104. '
  105. DIM v4_0#(15)
  106. DIM v4_1#(15)
  107. DIM v4_2#(15,25)
  108. DIM v4_3#(20,2)
  109. DIM v5_0$(32008)
  110. DIM v5_2$(30)
  111. DIM v5_3$(15)
  112. DIM v5_4$(5)
  113. DIM v4_7#(100,5)
  114. '
  115. ' animation descriptor
  116. ' array dim   meaning
  117. ' ------------------------
  118. ' 0     animation frame
  119. ' 1     bottle x coordinate
  120. ' 2     bottle y coordinate
  121. ' 3     virus color
  122. ' 4     screen x
  123. ' 5     screen y
  124. '
  125. ARRAYFILL v4_3#(),0
  126. ARRAYFILL v4_7#(),-1
  127. '
  128. FOR v0_18#=0 TO 15
  129.   READ v4_1#(v0_18#)
  130.   v4_0#(v0_18#)=XBIOS(7,v0_18#,-1)
  131. NEXT v0_18#
  132. '
  133. DATA 0,1792,1536,551,112,7,96,1908,1365,1856,1540,823,7,1365,819,1911
  134. '
  135. @vB_0
  136. @vB_1
  137. v0_19#=FALSE
  138. @vB_17
  139. STICK 1
  140. v0_5A#=0
  141. WHILE NOT v0_19#
  142.   IF v0_1A#=0
  143.     WAVE 0
  144.     EVERY STOP
  145.     v0_1B#=0
  146.     INC v0_14#
  147.     @vB_2
  148.     PUT 0,0,v1_2$,3
  149.     @vB_3
  150.     @vB_1
  151.     v0_45#=0
  152.     IF v0_14#=4
  153.       GOSUB vB_23
  154.     ENDIF
  155.     EVERY 4 GOSUB vB_21
  156.   ENDIF
  157.   @vB_4
  158.   v0_1C#=FALSE
  159.   WHILE NOT v0_1C#
  160.     v0_1D#=TIMER+105-(v0_14#*5)-INT(v0_1B#/50)
  161.     INC v0_1B#
  162.     PRINT AT(1,5);105-(v0_14#*5)-INT(v0_1B#/50);" ";
  163.     v0_62#=0
  164.     WHILE TIMER<v0_1D#
  165.       '     IF stick=FALSE
  166.       v1_3$=RIGHT$(INKEY$,1)
  167.       SELECT v1_3$
  168.       CASE "H"
  169.         @vB_5
  170.       CASE "K"
  171.         @vB_6
  172.       CASE "M"
  173.         @vB_7
  174.       CASE "P"
  175.         v0_1D#=TIMER
  176.       ENDSELECT
  177.       '  ELSE
  178.       v0_48#=STICK(1)
  179.       IF v0_48#<>v0_49#
  180.         SELECT v0_48#
  181.         CASE 4
  182.           @vB_6
  183.         CASE 8
  184.           @vB_7
  185.         CASE 2
  186.           v0_1D#=TIMER
  187.         ENDSELECT
  188.         v0_49#=v0_48#
  189.       ENDIF
  190.       v0_4A#=STRIG(1)
  191.       IF v0_4A#<>v0_4B#
  192.         IF STRIG(1)
  193.           @vB_5
  194.         ENDIF
  195.         v0_4B#=v0_4A#
  196.       ENDIF
  197.       ' ENDIF
  198.     WEND
  199.     @vB_8
  200.     IF NOT v0_1C#
  201.       @vB_9(v0_1F#,v0_20#,v0_21#)
  202.       INC v0_20#
  203.       @vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
  204.     ELSE
  205.       v0_24#=1
  206.       v0_54#=100
  207.       WHILE v0_24#>0
  208.         v0_24#=0
  209.         @vB_B
  210.         IF v0_26#>0 THEN
  211.           @vB_C
  212.           ADD v0_54#,100
  213.         ENDIF
  214.         @vB_D
  215.       WEND
  216.       '
  217.     ENDIF
  218.   WEND
  219. WEND
  220. PRINT AT(5,10);"Game_Over"
  221. '
  222. FUNCTION vE_0(v0_2E#,v0_2F#)
  223.   v0_59#=TRUE
  224.   IF v4_2#(v0_2E#,v0_2F#)<>v0_D#
  225.     v0_59#=FALSE
  226.   ENDIF
  227.   RETURN v0_59#
  228. ENDFUNC
  229. '
  230. PROCEDURE vB_3
  231.   ARRAYFILL v4_2#(),v0_D#
  232.   FOR v0_27#=3 TO 20
  233.     v4_2#(0,v0_27#)=v0_E#
  234.     v4_2#(9,v0_27#)=v0_E#
  235.   NEXT v0_27#
  236.   FOR v0_27#=1 TO 9
  237.     v4_2#(v0_27#,20)=v0_E#
  238.   NEXT v0_27#
  239.   FOR v0_27#=0 TO 3
  240.     v4_2#(3,v0_27#)=v0_E#
  241.     v4_2#(6,v0_27#)=v0_E#
  242.     v4_2#(v0_27#,3)=v0_E#
  243.     v4_2#(v0_27#+6,3)=v0_E#
  244.   NEXT v0_27#
  245. RETURN
  246. '
  247. > PROCEDURE vB_4
  248.   v0_1F#=4
  249.   v0_20#=0
  250.   v0_22#=INT(RND*3)+1
  251.   v0_23#=INT(RND*3)+1
  252.   v0_21#=v0_12#
  253. RETURN
  254. '
  255. > PROCEDURE vB_5
  256.   IF v0_20#>0
  257.     IF v0_21#=v0_13#
  258.       v0_28#=@vE_0(v0_1F#+1,v0_20#)
  259.     ELSE
  260.       v0_28#=@vE_0(v0_1F#,v0_20#-1)
  261.     ENDIF
  262.     IF v0_28#=TRUE
  263.       IF v0_21#=v0_13#
  264.         SWAP v0_22#,v0_23#
  265.       ENDIF
  266.       @vB_9(v0_1F#,v0_20#,v0_21#)
  267.       v0_21#=1-v0_21#
  268.       @vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
  269.     ENDIF
  270.   ENDIF
  271. RETURN
  272. '
  273. > PROCEDURE vB_6
  274.   v0_55#=@vE_0(v0_1F#-1,v0_20#)
  275.   IF v0_21#=v0_13#
  276.     v0_56#=@vE_0(v0_1F#-1,v0_20#-1)
  277.   ELSE
  278.     v0_56#=@vE_0(v0_1F#-1,v0_20#)
  279.   ENDIF
  280.   IF v0_56#=FALSE
  281.     v0_55#=FALSE
  282.   ENDIF
  283.   IF v0_55#=TRUE
  284.     @vB_9(v0_1F#,v0_20#,v0_21#)
  285.     DEC v0_1F#
  286.     @vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
  287.   ENDIF
  288. RETURN
  289. '
  290. > PROCEDURE vB_7
  291.   v0_55#=@vE_0(v0_1F#+1,v0_20#)
  292.   IF v0_21#=v0_13#
  293.     v0_56#=@vE_0(v0_1F#+1,v0_20#-1)
  294.   ELSE
  295.     v0_56#=@vE_0(v0_1F#+2,v0_20#)
  296.   ENDIF
  297.   IF v0_56#=FALSE
  298.     v0_55#=FALSE
  299.   ENDIF
  300.   IF v0_55#=TRUE
  301.     @vB_9(v0_1F#,v0_20#,v0_21#)
  302.     INC v0_1F#
  303.     @vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
  304.   ENDIF
  305. RETURN
  306. '
  307. > PROCEDURE vB_8
  308.   v0_58#=TRUE
  309.   v0_57#=@vE_0(v0_1F#,v0_20#+1)
  310.   IF v0_21#=v0_12#
  311.     v0_58#=@vE_0(v0_1F#+1,v0_20#+1)
  312.   ENDIF
  313.   v0_1C#=FALSE
  314.   IF (v0_57#=FALSE OR v0_58#=FALSE)
  315.     v0_1C#=TRUE
  316.   ENDIF
  317.   IF v0_1C#=TRUE
  318.     IF v0_21#=v0_12#
  319.       v4_2#(v0_1F#,v0_20#)=v0_22# OR 8
  320.       v4_2#(v0_1F#+1,v0_20#)=v0_23# OR 4
  321.     ELSE
  322.       v4_2#(v0_1F#,v0_20#)=v0_22# OR 16
  323.       v4_2#(v0_1F#,v0_20#-1)=v0_23# OR 32
  324.     ENDIF
  325.     IF v0_20#<=2
  326.       vB_10
  327.       v0_19#=TRUE
  328.     ENDIF
  329.   ENDIF
  330. RETURN
  331. '
  332. > PROCEDURE vB_9(v0_1F#,v0_20#,v0_21#)
  333.   IF v0_21#=v0_13#
  334.     PRINT AT(v0_1F#+v0_16#,v0_20#+v0_17#);" ";
  335.     PRINT AT(v0_1F#+v0_16#,v0_20#+v0_17#-1);" ";
  336.   ELSE
  337.     PRINT AT(v0_1F#+v0_16#,v0_20#+v0_17#);" ";
  338.     PRINT AT(v0_1F#+1+v0_16#,v0_20#+v0_17#);" ";
  339.   ENDIF
  340. RETURN
  341. '
  342. > PROCEDURE vB_A(v0_2C#,v0_2D#,v0_22#,v0_23#,v0_21#)
  343.   ADD v0_2C#,v0_16#
  344.   ADD v0_2D#,v0_17#
  345.   DEC v0_2C#
  346.   DEC v0_2D#
  347.   MUL v0_2C#,8
  348.   MUL v0_2D#,8
  349.   IF v0_21#=v0_13#
  350.     PUT v0_2C#,v0_2D#,v5_2$((v0_22#-1)*10+4)
  351.     PUT v0_2C#,v0_2D#-8,v5_2$((v0_23#-1)*10+3)
  352.   ELSE
  353.     PUT v0_2C#,v0_2D#,v5_2$((v0_22#-1)*10+1)
  354.     PUT v0_2C#+8,v0_2D#,v5_2$((v0_23#-1)*10+2)
  355.   ENDIF
  356. RETURN
  357. '
  358. > PROCEDURE vB_B
  359.   v0_26#=0
  360.   v0_4F#=0
  361.   FOR v0_18#=1 TO 8
  362.     FOR v0_27#=19 DOWNTO 4
  363.       v0_30#=v0_27#
  364.       v0_31#=(v4_2#(v0_18#,v0_27#) AND 3)
  365.       IF v0_31#<>v0_D#
  366.         WHILE (v4_2#(v0_18#,v0_27#-1) AND 3)=v0_31#
  367.           DEC v0_27#
  368.         WEND
  369.         IF v0_30#-v0_27#>=3
  370.           INC v0_4F#
  371.           FOR v0_50#=v0_30# DOWNTO v0_27#
  372.             v4_3#(v0_26#,1)=v0_18#
  373.             v4_3#(v0_26#,2)=v0_50#
  374.             INC v0_26#
  375.           NEXT v0_50#
  376.         ENDIF
  377.       ENDIF
  378.     NEXT v0_27#
  379.   NEXT v0_18#
  380.   '
  381.   FOR v0_27#=19 DOWNTO 4
  382.     FOR v0_18#=8 DOWNTO 4
  383.       v0_30#=v0_18#
  384.       v0_31#=(v4_2#(v0_18#,v0_27#) AND 3)
  385.       IF v0_31#<>v0_D#
  386.         WHILE (v4_2#(v0_18#-1,v0_27#) AND 3)=v0_31#
  387.           DEC v0_18#
  388.         WEND
  389.         IF v0_30#-v0_18#>=3
  390.           INC v0_4F#
  391.           FOR v0_50#=v0_30# DOWNTO v0_18#
  392.             v4_3#(v0_26#,1)=v0_50#
  393.             v4_3#(v0_26#,2)=v0_27#
  394.             INC v0_26#
  395.           NEXT v0_50#
  396.         ENDIF
  397.       ENDIF
  398.     NEXT v0_18#
  399.   NEXT v0_27#
  400. RETURN
  401. '
  402. > PROCEDURE vB_C
  403.   '
  404.   v0_32#=0
  405.   FOR v0_50#=0 TO v0_26#
  406.     v0_18#=v4_3#(v0_50#,1)
  407.     v0_27#=v4_3#(v0_50#,2)
  408.     IF v4_2#(v0_18#,v0_27#)<>v0_D#
  409.       IF v4_2#(v0_18#,v0_27#) AND 8
  410.         v4_2#(v0_18#+1,v0_27#)=v4_2#(v0_18#+1,v0_27#) AND 3
  411.         @vB_F(v0_18#+1,v0_27#,v4_2#(v0_18#+1,v0_27#))
  412.       ENDIF
  413.       IF v4_2#(v0_18#,v0_27#) AND 4
  414.         v4_2#(v0_18#-1,v0_27#)=v4_2#(v0_18#-1,v0_27#) AND 3
  415.         @vB_F(v0_18#-1,v0_27#,v4_2#(v0_18#-1,v0_27#))
  416.       ENDIF
  417.       IF v4_2#(v0_18#,v0_27#) AND 32
  418.         v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#+1) AND 3
  419.         @vB_F(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#+1))
  420.       ENDIF
  421.       IF v4_2#(v0_18#,v0_27#) AND 16
  422.         v4_2#(v0_18#,v0_27#-1)=v4_2#(v0_18#,v0_27#-1) AND 3
  423.         @vB_F(v0_18#,v0_27#-1,v4_2#(v0_18#,v0_27#-1))
  424.       ENDIF
  425.       IF v4_2#(v0_18#,v0_27#) AND 64
  426.         @vB_10
  427.         DEC v0_1A#
  428.         INC v0_32#
  429.         ADD v0_15#,v0_54#
  430.       ENDIF
  431.       @vB_11(v0_18#,v0_27#,v4_2#(v0_18#,v0_27#) AND 3)
  432.       v4_2#(v0_18#,v0_27#)=(v4_2#(v0_18#,v0_27#) OR 128) AND 131
  433.     ENDIF
  434.   NEXT v0_50#
  435.   IF v0_32#>1
  436.     ADD v0_15#,100*v0_32#
  437.   ENDIF
  438.   @vB_12
  439.   '  Pause 30
  440.   FOR v0_27#=1 TO 20
  441.     FOR v0_18#=1 TO 8
  442.       IF v4_2#(v0_18#,v0_27#)>128
  443.         v4_2#(v0_18#,v0_27#)=v0_D#
  444.         PRINT AT(v0_18#+v0_16#,v0_27#+v0_17#);" ";
  445.       ENDIF
  446.     NEXT v0_18#
  447.   NEXT v0_27#
  448. RETURN
  449. '
  450. > PROCEDURE vB_D
  451.   v0_24#=0
  452.   FOR v0_27#=19 TO 1 STEP -1
  453.     FOR v0_18#=1 TO 8
  454.       IF (v4_2#(v0_18#,v0_27#) AND 3)<>v0_D#
  455.         IF (v4_2#(v0_18#,v0_27#) AND 8)=8
  456.           v0_36#=@vE_0(v0_18#,v0_27#+1)
  457.           v0_29#=@vE_0(v0_18#+1,v0_27#+1)
  458.           IF (v0_36#=TRUE AND v0_29#=TRUE)
  459.             v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#)
  460.             v4_2#(v0_18#+1,v0_27#+1)=v4_2#(v0_18#+1,v0_27#)
  461.             v4_2#(v0_18#,v0_27#)=v0_D#
  462.             v4_2#(v0_18#+1,v0_27#)=v0_D#
  463.             INC v0_24#
  464.             @vB_A(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#+1) AND 3,v4_2#(v0_18#+1,v0_27#+1) AND 3,v0_12#)
  465.             @vB_9(v0_18#,v0_27#,v0_12#)
  466.           ENDIF
  467.         ENDIF
  468.         IF (v4_2#(v0_18#,v0_27#) AND 16)=16
  469.           IF @vE_0(v0_18#,v0_27#+1)=TRUE
  470.             v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#)
  471.             v4_2#(v0_18#,v0_27#)=v4_2#(v0_18#,v0_27#-1)
  472.             v4_2#(v0_18#,v0_27#-1)=v0_D#
  473.             INC v0_24#
  474.             @vB_9(v0_18#,v0_27#,v0_13#)
  475.             @vB_A(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#+1) AND 3,v4_2#(v0_18#,v0_27#) AND 3,v0_13#)
  476.           ENDIF
  477.         ENDIF
  478.         IF (v4_2#(v0_18#,v0_27#)>0 AND v4_2#(v0_18#,v0_27#)<4)
  479.           IF @vE_0(v0_18#,v0_27#+1)=TRUE
  480.             @vB_F(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#))
  481.             PRINT AT(v0_18#+v0_16#,v0_27#+v0_17#);" ";
  482.             v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#)
  483.             v4_2#(v0_18#,v0_27#)=v0_D#
  484.             INC v0_24#
  485.           ENDIF
  486.         ENDIF
  487.       ENDIF
  488.     NEXT v0_18#
  489.   NEXT v0_27#
  490. RETURN
  491. '
  492. > PROCEDURE vB_11(v0_37#,v0_38#,v0_39#)
  493.   ADD v0_37#,v0_16#
  494.   ADD v0_38#,v0_17#
  495.   DEC v0_37#
  496.   DEC v0_38#
  497.   MUL v0_37#,8
  498.   MUL v0_38#,8
  499.   PUT v0_37#,v0_38#,v5_2$((v0_39#-1)*10+5)
  500. RETURN
  501. '
  502. > PROCEDURE vB_F(v0_3A#,v0_3B#,v0_3C#)
  503.   ADD v0_3A#,v0_16#
  504.   ADD v0_3B#,v0_17#
  505.   DEC v0_3A#
  506.   DEC v0_3B#
  507.   MUL v0_3A#,8
  508.   MUL v0_3B#,8
  509.   PUT v0_3A#,v0_3B#,v5_2$((v0_3C#-1)*10)
  510. RETURN
  511. '
  512. PROCEDURE vB_13
  513.   PRINT DIR$(0)
  514.   v1_2$=SPACE$(32000)
  515.   OPEN "I",#1,"stuff.PUT"
  516.   v1_2$=INPUT$(32006,#1)
  517.   CLOSE #1
  518.   PUT 0,0,v1_2$,3
  519.   OPEN "I",#1,"necshape.nec"
  520.   FOR v0_18#=0 TO 29
  521.     v5_2$(v0_18#)=INPUT$(70,#1)
  522.   NEXT v0_18#
  523.   FOR v0_18#=0 TO 14
  524.     v5_3$(v0_18#)=INPUT$(70,#1)
  525.   NEXT v0_18#
  526.   FOR v0_18#=0 TO 3
  527.     v5_4$(v0_18#)=INPUT$(70,#1)
  528.   NEXT v0_18#
  529.   CLOSE #1
  530. RETURN
  531. '
  532. > PROCEDURE vB_14
  533.   FOR v0_18#=0 TO 15
  534.     v2_0%=XBIOS(7,v0_18#,v4_0#(v0_18#))
  535.   NEXT v0_18#
  536.   SPOKE (&H484),PEEK(&H484) OR 1
  537.   WAVE 0
  538.   STICK 0
  539. RETURN
  540. '
  541. > PROCEDURE vB_15
  542.   FOR v0_18#=v0_3D# TO 15
  543.     SETCOLOR v0_18#,v4_1#(v0_18#)
  544.   NEXT v0_18#
  545.   ' kill keyclick
  546.   SPOKE (&H484),PEEK(&H484) AND 254
  547. RETURN
  548. '
  549. PROCEDURE vB_0
  550.   @vB_15
  551.   CLS
  552.   DEFTEXT 6,1,0,32
  553.   TEXT 0,25,"Dr. Necro"
  554.   DEFTEXT 4,0,0,6
  555.   TEXT 0,35,"GFA Beta Test -- 3 level limit"
  556.   DEFTEXT 3,0,0,13
  557.   TEXT 0,50,CHR$(189)+"1991,92 NecroWare Productions"
  558.   DEFTEXT 7,0,0,13
  559.   TEXT 0,65,"Beta "+v1_0$+"  "+v1_1$+"   By: Ken Schafer"
  560.   DEFTEXT 8,0,0,6
  561.   TEXT 0,80,"Look for the complete C language version,"
  562.   TEXT 0,89,"Coming in Winter 1992 to a BBS near you!"
  563.   DEFTEXT 9,0,0,4
  564.   TEXT 0,100,"This version (GFA 0.62r) is GIGGLE-WARE!"
  565.   TEXT 0,107,"After you chuckle at its crudeness, you are asked"
  566.   TEXT 0,114,"to send me a letter with your comments, suggestions"
  567.   TEXT 0,121,"and bug-reports.  checks are fine too! =)"
  568.   DEFTEXT 11,0,0,6
  569.   TEXT 0,135,"Special Thanx to the 3 individuals who"
  570.   TEXT 0,144,"registered version 0.58b!!!"
  571.   DEFTEXT 10,0,0,6
  572.   TEXT 0,154,"Gordon Meyer     Michael Starnes"
  573.   TEXT 0,163,"Wilfred Lussier"
  574.   DEFTEXT 12,0,0,6
  575.   TEXT 0,175,"It is your comments, checks and letters"
  576.   TEXT 0,184,"that kept me working on this!!"
  577.   DEFTEXT 13,0,0,6
  578.   TEXT 0,193,"THANK YOU!   _Ken Schafer_"
  579.   v0_3E#=INP(2)
  580.   CLS
  581.   @vB_13
  582.   @vB_3
  583. RETURN
  584. '
  585. PROCEDURE vB_23
  586.   CLS
  587.   PRINT "DEMO OVER! =("
  588.   PRINT
  589.   PRINT "Some notes:"
  590.   PRINT "This is only a GFA BASIC version."
  591.   PRINT "I originally started this project with"
  592.   PRINT "GFA v.2.02 and zipped it over to v.3.05"
  593.   PRINT "when I upgraded. Unfortunately, Basic"
  594.   PRINT "is not fast enough to do the animation"
  595.   PRINT "on the higher levels, so I began moving"
  596.   PRINT "to Laser C. The C version is only up to"
  597.   PRINT "0.27, but functions exactly like this,"
  598.   PRINT "minus the sound and animation.  (Well,"
  599.   PRINT "almost, the C routines are much cleaner"
  600.   PRINT "and fix bugs you may have noticed in"
  601.   PRINT "the do_falls() and check_lines() code)"
  602.   PRINT
  603.   PRINT "Thank you for sampling this teaser!"
  604.   PRINT "be sure to get the finished version"
  605.   PRINT "when I release it, and remember, it"
  606.   PRINT "WILL be shareware."
  607.   PRINT "Please pay for what you use!"
  608.   PRINT
  609.   PRINT "press * to exit!"
  610.   WHILE v1_3$<>"*"
  611.     v1_3$=RIGHT$(INKEY$,1)
  612.   WEND
  613.   @vB_14
  614.   ~GEMDOS(76,0)
  615. RETURN
  616. '
  617. > PROCEDURE vB_12
  618.   COLOR 0
  619.   DEFFILL 1
  620.   GRAPHMODE 2
  621.   DEFTEXT 0,0,0,6
  622.   v1_4$=LEFT$("0000000",7-LEN(STR$(v0_15#)))+STR$(v0_15#)
  623.   PBOX 48,56,102,64
  624.   TEXT 48,62,v1_4$
  625.   COLOR 11
  626.   DEFFILL 14
  627.   DEFTEXT 0,0,0,6
  628.   v1_5$=LEFT$("00",2-LEN(STR$(v0_1A#)))+STR$(v0_1A#)
  629.   PBOX 248,176,263,184
  630.   TEXT 248,183,v1_5$
  631.   v1_6$=LEFT$("00",2-LEN(STR$(v0_14#)))+STR$(v0_14#)
  632.   PBOX 248,128,263,136
  633.   TEXT 248,135,v1_6$
  634.   GRAPHMODE 1
  635. RETURN
  636. '
  637. > PROCEDURE vB_2
  638.   ADD v0_15#,v0_14#*1000
  639.   @vB_12
  640.   COLOR 12
  641.   DEFFILL 11
  642.   GRAPHMODE 2
  643.   DEFTEXT 1,0,0,6
  644.   DEFLINE 0,4,0,0
  645.   PRBOX 120,64,200,127
  646.   RBOX 120,64,200,127
  647.   TEXT 128,78,"GOOD JOB"
  648.   TEXT 128,86,"--------"
  649.   TEXT 132,94,"Prepare"
  650.   TEXT 148,102,"For"
  651.   TEXT 144,110,"Next"
  652.   TEXT 140,118,"Level"
  653.   PAUSE 120
  654.   GRAPHMODE 1
  655. RETURN
  656. '
  657. > PROCEDURE vB_1
  658.   PUT 0,0,v5_0$(3)
  659.   PRINT AT(1,1);"Ver";
  660.   PRINT AT(1,2);v1_0$;
  661.   PRINT AT(1,4);"Dif";
  662.   v0_1A#=v0_14#*4+4
  663.   v0_74#=v0_1A#
  664.   v0_3F#=10
  665.   IF v0_14#>10
  666.     ADD v0_3F#,INT((v0_14#-10)/2)
  667.   ENDIF
  668.   v0_40#=0
  669.   FOR v0_18#=1 TO v0_1A#
  670.     v0_41#=20-INT(RND*v0_3F#)
  671.     v0_42#=INT(RND*8)+1
  672.     WHILE v4_2#(v0_42#,v0_41#)<>v0_D#
  673.       v0_41#=20-INT(RND*v0_3F#)
  674.       v0_42#=INT(RND*8)+1
  675.     WEND
  676.     INC v0_40#
  677.     IF v0_40#=4
  678.       v0_40#=1
  679.     ENDIF
  680.     v4_7#(v0_18#,0)=INT(RND*5)
  681.     v4_7#(v0_18#,1)=v0_42#
  682.     v4_7#(v0_18#,2)=v0_41#
  683.     v4_7#(v0_18#,3)=v0_40#
  684.     v4_2#(v0_42#,v0_41#)=64+v0_40#
  685.     ADD v0_42#,v0_16#
  686.     ADD v0_41#,v0_17#
  687.     DEC v0_42#
  688.     DEC v0_41#
  689.     MUL v0_42#,8
  690.     MUL v0_41#,8
  691.     v4_7#(v0_18#,4)=v0_42#
  692.     v4_7#(v0_18#,5)=v0_41#
  693.     PUT v0_42#,v0_41#,v5_3$((v0_40#-1)*5+v0_5A#)
  694.   NEXT v0_18#
  695.   v0_72#=1
  696.   v0_6E#=0
  697.   v0_6F#=0
  698.   @vB_12
  699. RETURN
  700. '
  701. > PROCEDURE vB_10
  702.   FOR v0_43#=5 DOWNTO 2
  703.     SOUND 1,15,v0_43#,5,1
  704.   NEXT v0_43#
  705.   FOR v0_43#=2 TO 5
  706.     SOUND 1,15,v0_43#,5,1
  707.   NEXT v0_43#
  708.   SOUND 1,0,0,0,0
  709.   WAVE 37
  710. RETURN
  711. '
  712. PROCEDURE vB_17
  713.   RESTORE vA_4
  714.   READ v0_4C#
  715.   DIM v4_4#(3,v0_4C#),v4_5#(3,v0_4C#)
  716.   FOR v0_44#=1 TO 3
  717.     FOR v0_18#=1 TO v0_4C#
  718.       READ v4_4#(v0_44#,v0_18#)
  719.       READ v4_5#(v0_44#,v0_18#)
  720.     NEXT v0_18#
  721.   NEXT v0_44#
  722.   '
  723.   v0_45#=0
  724.   WAVE 39,7,8
  725.   EVERY 4 GOSUB vB_21
  726. RETURN
  727. '
  728. > PROCEDURE vB_21
  729.   '
  730.   INC v0_6E#
  731.   IF v0_6E#=2
  732.     GOSUB vB_1C
  733.     v0_6E#=0
  734.   ENDIF
  735.   INC v0_6F#
  736.   IF v0_6F#=8
  737.     GOSUB vB_18
  738.     v0_6F#=0
  739.   ENDIF
  740. RETURN
  741. '
  742. > PROCEDURE vB_18
  743.   '
  744.   INC v0_45#
  745.   IF v0_45#=v0_4C#
  746.     v0_45#=0
  747.   ENDIF
  748.   FOR v0_44#=1 TO 3
  749.     SOUND v0_44#,0,0,0
  750.     WAVE 35
  751.     IF v4_4#(v0_44#,v0_45#)<>0
  752.       SOUND v0_44#,13,v4_4#(v0_44#,v0_45#),v4_5#(v0_44#,v0_45#)
  753.       IF (v0_45#>=193 AND v0_45#<=222)
  754.         WAVE 7,7
  755.       ELSE
  756.         WAVE 35,35,9,5000
  757.       ENDIF
  758.     ENDIF
  759.   NEXT v0_44#
  760. RETURN
  761. '
  762. PROCEDURE vB_1C
  763.   '
  764.   ' handle virus animation
  765.   '
  766.   FOR v0_67#=1 TO v0_14#+1
  767.     INC v0_72#
  768.     IF v0_72#>v0_74#
  769.       v0_72#=1
  770.     ENDIF
  771.     IF v4_7#(v0_72#,3)>0
  772.       IF v4_2#(v4_7#(v0_72#,1),v4_7#(v0_72#,2)) AND 64
  773.         v0_71#=v4_7#(v0_72#,0)
  774.         INC v0_71#
  775.         IF v0_71#=5
  776.           v0_71#=0
  777.         ENDIF
  778.         v4_7#(v0_72#,0)=v0_71#
  779.         PUT v4_7#(v0_72#,4),v4_7#(v0_72#,5),v5_3$((v4_7#(v0_72#,3)-1)*5+v0_71#)
  780.       ELSE
  781.         v4_7#(v0_72#,3)=0
  782.       ENDIF
  783.     ENDIF
  784.   NEXT v0_67#
  785. RETURN
  786. '
  787. vA_4:
  788. DATA 284
  789. vA_3:
  790. DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
  791. DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
  792. DATA 11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2,9,2,9,2,8,2,8,2,6,2,6,2,3,2,3,2
  793. DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
  794. DATA 1,2,1,2,5,2,5,2,8,2,8,2,10,2,10,2,11,1,11,1,1,2,1,2,3,2,3,2,8,2,8,2
  795. DATA 6,1,6,1,10,1,10,1,11,1,11,1,12,1,12,1,1,2,1,3,1,3,1,3,1,3,1,2,4,2,4,2
  796. DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
  797. DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
  798. DATA 11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2,9,2,9,2,8,2,8,2,6,2,6,2,3,2,3,2
  799. DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
  800. DATA 1,2,1,2,5,2,5,2,8,2,8,2,10,2,10,2,11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2
  801. DATA 6,1,6,1,10,1,10,1,11,1,11,1,12,1,12,1,1,2,1,3,1,3,1,3,1,3,1,2,4,2,4,2
  802. DATA 6,1,0,0,0,0,0,0,0,0,0,0,0,0,6,1,5,3,6,3,1,3,11,2,10,2,0,0,6,1,5,3
  803. DATA 6,3,1,3,3,3,1,3,6,3,10,3,6,4,6,4,4,4,4,4,3,4,3,4,1,4,1,4,11,1,11,1
  804. DATA 3,2,3,2,6,2,6,2,8,2,8,2,9,2,9,2,8,2,8,2,6,2,6,2,3,2,3,2,6,1,6,1
  805. DATA 10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,1,3,1,1,2,1,2,10,1,10,1,1,2,1,2
  806. DATA 5,2,5,2,8,2,8,2,10,2,10,2,11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2,6,1,6,1
  807. DATA 10,1,10,1,11,1,11,1,12,1,12,1,1,2,11,1,8,1,6,1,6,1,0,0
  808. '
  809. DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,10,4,0,0,6,4,3,4,1,4
  810. DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,10,4,0,0,6,4,3,4,1,4
  811. DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,9,4,0,0,6,4,3,4,1,4
  812. DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,10,4,0,0,6,4,3,4,1,4
  813. DATA 0,0,1,5,12,4,0,0,9,4,6,4,3,4,1,4,1,5,11,4,0,0,9,4,0,0,0,0,0,0,0,0
  814. DATA 0,0,6,4,4,4,4,4,3,4,3,4,2,4,2,4,0,0,1,5,1,5,1,5,1,5,0,0,0,0,0,0
  815. DATA 9,4,10,4,1,5,0,0,6,5,6,5,0,0,0,0,9,4,11,4,1,5,6,5,0,0,0,0,0,0,0,0
  816. DATA 0,0,1,5,11,4,0,0,10,4,6,4,3,4,1,4,6,4,6,4,0,0,10,4,0,0,0,0,0,0,0,0
  817. DATA 8,4,9,4,1,5,0,0,6,5,6,5,0,0,0,0,8,4,9,4,1,5,6,5,0,0,0,0,0,0,0,0
  818. DATA 0,0,1,5,11,4,0,0,10,4,6,4,3,4,1,4,6,4,6,4,0,0,10,4,0,0